package com.example.demo.TextTest;

import java.math.BigInteger;

/**
 * @author LHH
 * @date 2024/12/26
 */
public class UuidTest {
    // 字符集，包含拼音字母（a-z）和数字（0-9）
    private static final String CHAR_SET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

    public static void main(String[] args) {
        // 生成一个 UUID
//        UUID uuid = UUID.randomUUID();
        String uuid = "594f969cab064837849d0c7c2b897b0f";
        // 将 UUID 转换为 8 位短码
        String shortCode = uuidToShortCode(uuid);

        // 输出结果
        System.out.println("UUID: " + uuid);
        System.out.println("8 位短码: " + shortCode);

    }


    // 将 UUID 转换为 8 位短码
    public static String uuidToShortCode(String uuid) {

        // 将 UUID 转换为一个 128 位的整数
        String uuidHex = uuid.replace("-", "");

        // 将 UUID 的前 16 个字符和后 16 个字符转换为 BigInteger
        BigInteger part1 = new BigInteger(uuidHex.substring(0, 16), 16);  // 前 16 位
        BigInteger part2 = new BigInteger(uuidHex.substring(16), 16);     // 后 16 位

        // 将两个部分进行 XOR 运算
        BigInteger combinedValue = part1.xor(part2);

        // 使用字符集将 BigInteger 数值转换为 8 位短码
        StringBuilder shortCode = new StringBuilder();

        // 从 combinedValue 获取对应的字符
        while (combinedValue.compareTo(BigInteger.ZERO) > 0) {
            int index = combinedValue.mod(BigInteger.valueOf(CHAR_SET.length())).intValue();
            shortCode.append(CHAR_SET.charAt(index));
            combinedValue = combinedValue.divide(BigInteger.valueOf(CHAR_SET.length()));
        }

        // 返回反转后的短码，确保它从右侧开始生成
        return shortCode.reverse().toString();
    }

}
